/*5．编写一个程序满足下面的要求。
a．外部定义一个有两个成员的结构模板name：一个字符串储存名，一个字符串储存姓。
b．外部定义一个有3个成员的结构模板student ：一个name 类型的结构，
一个grade 数组储存3个浮点型分数，一个变量储存3个分数平均数。
c．在main() 函数中声明一个内含CSIZE （CSIZE = 4 ）个student类型结构的数组，
并初始化这些结构的名字部分。用函数执行g 、e 、f 和g 中描述的任务。
d．以交互的方式获取每个学生的成绩，提示用户输入学生的姓名和分数。
把分数储存到grade数组相应的结构中。可以在main() 函数或其他函数中用循环来完成。
e．计算每个结构的平均分，并把计算后的值赋给合适的成员。
f．打印每个结构的信息。
g．打印班级的平均分，即所有结构的数值成员的平均值。*/

#include <stdio.h>

#define Max 20
#define CSIZE 4

typedef struct
{
    char lastname[Max];
    char firstname[Max];
}Name;

typedef struct
{
    Name name;
    float grade[3];
    float avegrade;
}Student;

int main(){
    Student arr[CSIZE] = {
        {{"yu1", "long1"}},
        {{"yu2", "long2"}},
        {{"yu3", "long3"}},
        {{"yu5", "long5"}},
    };

    for(int i = 0;i < CSIZE; i++)
    {
        float total = 0;
        for(int j = 0;j < 3; j++)
            {
                printf("请输入第%d个学生第%d门课的成绩\n", i + 1, j + 1);
                scanf("%f", &(arr[i].grade[j]));
                total = total + arr[i].grade[j];
                arr[i].avegrade = total / 3;
            }  
    }

    for(int i = 0;i < CSIZE; i++)
    {
        printf("第%d个学生%s %s三门课的成绩分别是%f %f %f,平均分为%f", i + 1, arr[i].name.firstname, arr[i].name.lastname,
        arr[i].grade[0], arr[i].grade[1], arr[i].grade[2], arr[i].avegrade);
    }
    return 0;
}